home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 8
/
FM Towns Free Software Collection 8.iso
/
t_os
/
socio
/
socio.bas
< prev
next >
Wrap
BASIC Source File
|
1994-06-01
|
12KB
|
314 lines
10 ' ############################################################
20 ' # ソシオメトリー #
30 ' # #
40 ' # 開発 MZ-731 昭和58年 #
50 ' # 移植 FM-7 昭和59年(打ち直し) #
60 ' # PC8801mk2SR 昭和61年(RS-232C) #
70 ' # PC9801VM2 昭和62年(コンバータ) #
80 ' # FM-16β 昭和62年(エデイタ) #
90 ' # 修正完了 昭和63年4月 #
100 '# #
110 '# 著作権保持者 後藤勝美 #
120 '# #
130 '############################################################
140 CLEAR:CONSOLE 0,24,1:DEFINT A-Z:COLOR 7,0:CLS
150 J=2:K=5
160 '
170 GOSUB *INITIALIZE
180 PRINT:INPUT"印刷時のタイトルを入力してください ";TI$
190 INPUT"選択制限数(何名まで選択させるか)は ";D
200 INPUT"調査表を作成しますか(プリンター用意) (Y/N)";S$
210 '----- SCREEN -----
220 CLS
230 IF S$="Y" OR S$="y" THEN CONSOLE 0,24,0
240 IF M>=(W-M) THEN L=INT(M/2-.5!)+5
250 IF (W-M)>M THEN L=INT((W-M)/2-.5!)+5
260 LOCATE 5,3:PRINT" ****** データを入力してください ******":Y=1
270 IF Y=W+1 THEN Y=1
280 IF Y=0 THEN Y=W
290 LOCATE 0,0:PRINT" ";N$(Y);:COLOR 2
300 PRINT" が好きな者 ":COLOR 7
310 Z=1:GOTO 360
320 LOCATE 0,0:PRINT" ";N$(Y);:COLOR 1
330 PRINT" が嫌いな者 ":COLOR 7
340 Z=-1
350 '--- NAME ----
360 P=0:Q=5
370 FOR A=1 TO W
380 LOCATE P,Q
390 IF Y(Y,A)=1 AND Z=1 THEN COLOR 2
400 IF Y(Y,A)=-1 AND Z=-1THEN COLOR 1
410 PRINT USING"##";A;
420 COLOR 7,0:PRINT" ";N$(A)
430 IF Q=L THEN P=P+19:Q=5 ELSE Q=Q+1
440 IF A=M THEN P=38:Q=5
450 NEXT
460 BEEP:IF S$="Y" OR S$="y" THEN *TYOUSA
470 'LINE(0,330)-(639,380),PSET,7,B
480 'PAINT(10,370),4,7
490 LOCATE 0,21
500 PRINT" E:終了 M:資料マトリクス G:ソシオグラム S:調査データ登録 *:次(の子)へ"
510 PRINT" Z:前者 N:名簿登録 A:転入者追加 D:転出者抹消 B:データ修正"
520 S$="":GOTO *SELECT
530 '--- シリョウ マトリクス ----
540 LOCATE 0,19:INPUT"資料マトリクスをプリントしますか(Y/N) ";Y$
550 IF Y$="Y" OR Y$="y" THEN 560 ELSE 860
560 LOCATE 0,19:PRINT SPACE$(70)
570 LOCATE 0,19:INPUT"プリンターをセットしましたか (Y/N) ";Y$
580 LPRINT"< 資料マトリクス > ";TI$
590 L1$=" 11111111112222222222333333333344444444445"
600 L2$=" 12345678901234567890123456789012345678901234567890"
610 M1$=LEFT$(L1$,W+12)
620 M2$=LEFT$(L2$,W+12)
630 LPRINT
640 LPRINT M1$
650 LPRINT M2$;
660 LPRINT" C R CRS mc mr Isss"
670 FOR Q=1 TO W
680 LPRINT USING"##";Q;:LPRINT USING"& &";N$(Q);
690 FOR P=1 TO W
700 IF Y(P,Q)=1 AND Y(Q,P)=1 THEN LPRINT"L";:C=C+1:MC=MC+1:GOTO 750
710 IF Y(P,Q)=1 THEN LPRINT"o";:C=C+1:GOTO 750
720 IF Y(P,Q)=-1 AND Y(Q,P)=-1 THEN LPRINT"H";:R=R+1:MR=MR+1:GOTO 750
730 IF Y(P,Q)=-1 THEN LPRINT"x";:R=R+1:GOTO 750
740 LPRINT"・";
750 NEXT P
760 LPRINT USING" ## ## #### ## ## ####.##";C;R;C-R;MC;MR;((C-R)/(W-1)+(MC-MR)/D)/2*1000
770 C(Q)=C:R(Q)=R:CRS(Q)=C(Q)-R(Q)
780 C=0:R=0:CRS=0:MC=0:MR=0
790 NEXT Q
800 LPRINT:LPRINT
810 LPRINT"o:選択 x:排除 L:相互選択 H:相互排除"
820 LPRINT"C:選択数 R:排除数 C-R:差引 mc:相互選択数 mr:相互排除数"
830 LPRINT"Isss(x1000):地位指数"
840 LPRINT:LPRINT"COMPLEET !":BEEP
850 A=1:Y$="":RETURN 210
860 LOCATE 0,19:PRINT SPACE$(40):RETURN 1110
870 '--- 構造マトリクス -----
880 '
890 '
900 '
910 '
920 '
930 '
940 '----- SELECTION --------------------------
950 *SELECT
960 LOCATE 0,19:PRINT SPACE$(70)
970 LOCATE 0,19:INPUT"御命令を";MEI$
980 IF MEI$="B" OR MEI$="b" THEN GOSUB 2140
990 IF MEI$="M" OR MEI$="m" THEN GOSUB 540
1000 IF MEI$="G" OR MEI$="g" THEN GOSUB 1280
1010 IF MEI$="S" OR MEI$="s" THEN GOSUB 2840
1020 IF MEI$="*" OR MEI$="*" THEN GOTO 1240
1030 IF MEI$="Z" OR MEI$="z" THEN GOSUB 1260
1040 'IF MEI$="K" THEN GOSUB 900
1050 IF MEI$="A" OR MEI$="a" THEN GOSUB 1680
1060 IF MEI$="D" OR MEI$="d" THEN GOSUB 1940
1070 IF MEI$="I" OR MEI$="i" THEN GOSUB 3060
1080 IF MEI$="E" OR MEI$="e" THEN GOTO *END
1090 IF MEI$="N" OR MEI$="n" THEN GOSUB 2600
1100 LOCATE 0,19:PRINT" "
1110 G=VAL(MEI$):MEI$=""
1120 IF G<=0 THEN G=0:MEI$="":GOTO *SELECT
1130 IF G<=(L-4) THEN LOCATE 0,G+4:GOTO 1180
1140 IF G<=M THEN LOCATE 19,G-L+8:GOTO 1180
1150 IF G<=(M+L-4) THEN LOCATE 38,G-M+4:GOTO 1180
1160 IF G>W THEN GOTO *SELECT
1170 LOCATE 57,G-M-L+8:GOTO 1180
1180 IF G=Y THEN G=0:MEI$="":GOTO *SELECT
1190 IF Z=1 THEN COLOR 2:PRINT USING"##";G:Y(Y,G)=1
1200 IF Z=-1 THEN COLOR 1:PRINT USING"##";G:Y(Y,G)=-1
1210 G=0
1220 LOCATE 0,19:PRINT" "
1230 COLOR 7:GOTO *SELECT
1240 IF Z=1 THEN 320
1250 IF Z=-1 THEN Y=Y+1:GOTO 270
1260 Y=Y-1:GOTO 270
1270 '----- ソシオグラム -----
1280 LOCATE 0,19:INPUT"ソシオグラムを表示しますか (Y/N) ";Y$
1290 IF Y$="Y" OR Y$="y" THEN 1300 ELSE 1560
1300 LOCATE 0,19:PRINT SPACE$(70)
1310 LOCATE 0,19:PRINT"選択、排除を実線で結びます。 "
1320 BEEP:FOR I=1 TO 5000:NEXT
1330 CONSOLE 0,24,0:CLS:GOSUB 1590
1340 FOR P=1 TO W:FOR Q=1 TO W
1350 IF Y(P,Q)<>1 OR Q<P THEN 1410
1360 X1=210*COS(3.14159!/180*O*P)+330:Y1=190-160*SIN(3.14159!/180*O*P)
1370 X2=210*COS(3.14159!/180*O*Q)+330:Y2=190-160*SIN(3.14159!/180*O*Q)
1380 LINE(X1,Y1)-((X1+X2)/2,(Y1+Y2)/2),PSET,7,,&HFFFF
1390 IF Y(Q,P)=1 THEN LINE((X1+X2)/2,(Y1+Y2)/2)-(X2,Y2),PSET,7,,&HFFFF:GOTO 1410
1400 LINE((X1+X2)/2,(Y1+Y2)/2)-(X2,Y2),PSET,7,,&H6666
1410 NEXT Q,P
1420 LOCATE 0,0:INPUT"印刷しますか(Y/N) ";Y$
1430 IF Y$="Y" OR Y$="y" THEN LOCATE 0,0:PRINT SPACE$(70) ELSE 1440
1435 LOCATE 0,0:PRINT"< 選択 > ";TI$:HARDC 4
1440 CLS:GOSUB 1590
1450 COLOR 7
1460 FOR P=1 TO W:FOR Q=1 TO W
1470 IF Y(P,Q)<>-1 OR Q<P THEN 1530
1480 X1=210*COS(3.14159!/180*O*P)+330:Y1=190-160*SIN(3.14159!/180*O*P)
1490 X2=210*COS(3.14159!/180*O*Q)+330:Y2=190-160*SIN(3.14159!/180*O*Q)
1500 LINE(X1,Y1)-((X1+X2)/2,(Y1+Y2)/2),PSET,7,,&HFFFF
1510 IF Y(Q,P)=-1 THEN LINE((X1+X2)/2,(Y1+Y2)/2)-(X2,Y2),PSET,7,,&HFFFF:GOTO 1530
1520 LINE((X1+X2)/2,(Y1+Y2)/2)-(X2,Y2),PSET,7,,&H6666
1530 NEXT Q,P
1540 LOCATE 0,0:INPUT"印刷しますか (Y/N) ";Y$
1550 IF Y$="Y" OR Y$="y" THEN LOCATE 0,0:PRINT SPACE$(70) ELSE 1560
1555 LOCATE 0,0:PRINT"< 排除 > ";TI$:HARDC 4
1560 BEEP
1570 Y$="":Y=1:CLS 3:CONSOLE 0,24,1:RETURN 220
1580 '----- RING -----
1590 COLOR 1:O=340/W:P=1:Q=1:CO=1
1600 FOR A=1 TO W
1610 X1=INT(240*COS(3.14159!/180*O*A)+320)
1620 Y1=INT(180-176*SIN(3.14159!/180*O*A))
1630 SYMBOL@(X1,Y1),N$(A),1,1,2,0,OR
1640 IF A=M THEN CO=2
1650 NEXT A
1660 RETURN
1670 '----- ADD NAME ----
1680 IF W>47 THEN 950
1690 LOCATE 0,19:INPUT"転入者追加。追加する個人名は";H$
1700 IF H$="" THEN 1920
1710 LOCATE 0,19:PRINT SPACE$(70)
1720 LOCATE 0,19:INPUT"何番の後に挿入しますか";I$
1730 I=VAL(I$)
1740 IF I>W THEN H$="":I$="":GOTO 1920
1750 FOR A=W+1 TO I+2 STEP -1
1760 N$(A)=N$(A-1)
1770 NEXT A
1780 FOR P=W+1 TO I+2 STEP -1
1790 FOR Q=W+1 TO I STEP -1
1800 Y(P,Q)=Y(P-1,Q)
1810 NEXT Q,P
1820 FOR Q=W+1 TO I+2 STEP -1
1830 FOR P=W+1 TO 1 STEP -1
1840 Y(P,Q)=Y(P,Q-1)
1850 NEXT P,Q
1860 FOR A=1 TO W+1
1870 Y(I+1,A)=0:Y(A,I+1)=0
1880 NEXT A
1890 IF I=<M THEN M=M+1
1900 W=W+1
1910 N$(I+1)=H$:H$="":I$=""
1920 LOCATE 0,19:PRINT SPACE$(70):RETURN 210
1930 '----- ERASE -----
1940 LOCATE 0,19:INPUT"転出者削除。何番を削除しますか";E$
1950 IF E$="" THEN 2120
1960 E=VAL(E$)
1970 FOR A=E TO W-1
1980 N$(A)=N$(A+1)
1990 NEXT A
2000 N$(W+1)=""
2010 FOR P=E TO W-1:FOR Q=1 TO W-1
2020 Y(P,Q)=Y(P+1,Q)
2030 NEXT Q,P
2040 FOR Q=E TO W-1:FOR P=1 TO W-1
2050 Y(P,Q)=Y(P,Q+1)
2060 NEXT P,Q
2070 FOR A=1 TO W+1
2080 Y(A,W)=0:Y(W,A)=0
2090 NEXT A
2100 IF E=<M THEN M=M-1
2110 W=W-1:E$=""
2120 LOCATE 0,19:PRINT SPACE$(70):RETURN 210
2130 '----- DEBUG -----
2140 LOCATE 0,19
2150 INPUT"データ修正。何番ですか。";T$
2160 IF T$="" THEN 2260
2170 N=VAL(T$)
2180 IF N<1 OR N>W THEN T$="":GOTO 2260
2190 Y(Y,N)=0
2200 IF N<=(L-4) THEN LOCATE 0,N+4:GOTO 2250
2210 IF N<=M THEN LOCATE 19,N-L+8:GOTO 2250
2220 IF N<=(M+L-4) THEN LOCATE 38,N-M+4:GOTO 2250
2230 IF N>W THEN GOTO 2260
2240 LOCATE 57,N-M-L+8
2250 PRINT USING"##";N:T$="":N=0
2260 LOCATE 0,19:PRINT SPACE$(70)
2270 RETURN
2280 '----- 初期設定 -----
2290 *INITIALIZE
2300 COLOR 5:LINE(0,0)-(639,100),PSET,,B,&H8888:PRINT
2310 PRINT" ソシオメトリー"
2320 PRINT:PRINT" 製作 後藤勝美"
2330 PRINT:PRINT
2340 PRINT:PRINT:COLOR 7
2350 INPUT"クラスの人数は ";W
2360 INPUT"男子の人数は ";M
2370 DIM Y(50,50),M$(48),N$(48),C(48),R(48),CRS(48)
2380 LINE(0,0)-(639,100),PRESET,,B:PRINT:PRINT"1:名簿を読み込む "
2390 PRINT"2:これから入力する "
2400 COLOR 2:INPUT"どちらですか?番号を入力して下さい。";C$:COLOR 7
2410 IF C$="1" THEN 2700
2420 IF C$="2" THEN 2430 ELSE 2400
2430 BEEP:COLOR 2:PRINT:PRINT"名前を出席番号順に入力して下さい。漢字なら1人3文字以内にすると見易いです。"
2440 COLOR 5:PRINT:PRINT"〈 * を入力すると1つ前に戻ります 〉":COLOR 7,0
2450 FOR A=1 TO W
2460 PRINT USING"##";A;
2470 INPUT M$(A)
2480 IF M$(A)="*" THEN A=A-2 ELSE 2510
2490 IF A=-1 THEN 2450
2500 IF A=0 THEN 2450 ELSE 2520
2510 N$(A)=LEFT$(M$(A),10)
2520 NEXT
2530 PRINT:INPUT"登録しますか(Y/N)";B$
2540 IF B$="Y" OR B$="y" THEN 2550 ELSE RETURN
2550 INPUT"ファイル名は";F$
2560 OPEN F$ FOR OUTPUT AS #1
2570 FOR A=1 TO W:PRINT #1,N$(A):NEXT A
2580 CLOSE:BEEP:PRINT"終りました":RETURN
2590 '----- SAVE NAME DATA -----
2600 LOCATE 0,19:INPUT"名前を登録しますか(Y/N) ";Y$
2610 IF Y$="Y" OR Y$="y" THEN 2620 ELSE 2670
2620 LOCATE 0,19:PRINT SPACE$(70)
2630 LOCATE 0,19:INPUT"ファイル名は";F$
2640 OPEN F$ FOR OUTPUT AS #1
2650 FOR A=1 TO W:PRINT #1,N$(A):NEXT
2660 CLOSE:BEEP
2670 LOCATE 0,19:PRINT SPACE$(70)
2680 Y$="":RETURN
2690 '----- LOAD DATA -----
2700 FILES:COLOR 2:PRINT"これがドライブ0のファイル一覧表です。この中から選んで下さい。":COLOR 7
2710 INPUT"ファイル名は";F$
2720 OPEN F$ FOR INPUT AS #1
2730 FOR A=1 TO W:INPUT #1,N$(A):NEXT
2740 CLOSE:BEEP:PRINT
2750 INPUT"データを読み込みますか(Y/N)";D$
2760 IF D$="Y" OR D$="y" THEN 2770 ELSE RETURN
2770 INPUT"ファイル名は";F$
2780 OPEN F$ FOR INPUT AS #1
2790 FOR X=1 TO W:FOR Y=1 TO W
2800 INPUT #1,Y(X,Y)
2810 NEXT Y,X
2820 CLOSE:D$="":BEEP:CLS:RETURN
2830 '----- SAVE DATA -----
2840 LOCATE 0,19
2850 INPUT"データを登録しますか(Y/N) ";Y$
2860 IF Y$="Y" OR Y$="y" THEN 2870 ELSE 2940
2870 LOCATE 0,19:PRINT SPACE$(70)
2880 LOCATE 0,19:INPUT"ファイル名は ";F$
2890 OPEN F$ FOR OUTPUT AS #1
2900 FOR X=1 TO W:FOR Y=1 TO W
2910 PRINT #1,Y(X,Y)
2920 NEXT Y,X
2930 CLOSE:D$="":BEEP:RETURN
2940 LOCATE 0,19:PRINT SPACE$(70)
2950 Y$="":RETURN
2960 '----- 調査表 ----------------
2970 *TYOUSA
2980 LOCATE 0,0:PRINT"友だちしらべ ( 番 氏名 )"
2990 PRINT:PRINT"おなじはんになりたい人・・・・・・・○(";D;"人まで) "
3000 PRINT"おなじはんになりたくない人・・・×(";D;"人まで) "
3010 PRINT" "
3020 LOCATE 0,18:PRINT"*他の人のを見ないで、だまって書きなさい。"
3030 PRINT"*あてはまる人がいなければ、書かなくてよい。"
3040 PRINT"*出席番号順に提出しなさい。"
3050 HARDC 4:S$="":CONSOLE 0,24,1:GOTO 220
3060 '----- PROGRUM END -------------
3070 *END
3080 LOCATE 0,19:INPUT"プログラムを終わりますか (Y/N)";Y$
3090 IF Y$="Y" OR Y$="y" THEN 3100 ELSE 3110
3100 CLS:END
3110 LOCATE 0,19:PRINT SPACE$(79):GOTO *SELECT